package dao

import (
	"time"
)

// 这是 Resource 的全局公开dao对象，被service层调用!
var ResourceDao = resourceDao{}

// 资源
// 这是 resource表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Resource struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`
	Title         string    `json:"title" form:"title" db:"title" v:"title"` // 资源标题
	Form          string    `json:"form" form:"form" db:"form" v:"form"`
	Content       string    `json:"content" form:"content" db:"content" v:"content"`                                 // 资源内容
	Url           string    `json:"url" form:"url" db:"url" v:"url"`                                                 // 链接url
	Uid           int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                                                 // 作者
	Category      int32     `json:"category" form:"category" db:"category" v:"category"`                             // 所属类别
	LastReplyUid  int32     `json:"last_reply_uid" form:"last_reply_uid" db:"last_reply_uid" v:"last_reply_uid"`     // 最后回复者
	LastReplyTime time.Time `json:"last_reply_time" form:"last_reply_time" db:"last_reply_time" v:"last_reply_time"` // 最后回复时间
	Tags          string    `json:"tags" form:"tags" db:"tags" v:"tags"`                                             // tag,逗号分隔
	Ctime         time.Time `json:"ctime" form:"ctime" db:"ctime" v:"ctime"`
	Mtime         time.Time `json:"mtime" form:"mtime" db:"mtime" v:"mtime"`
}

// 注意:这是 Resource 的私有dao对象，只能在dao层内使用!
type resourceDao struct {
	InsertTemplate func(arg Resource) (int64, error)          //插入一条记录
	UpdateTemplate func(arg Resource) (int64, error)          //更新一条记录
	DeleteTemplate func(id int64) (int64, error)              `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Resource, error)           `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg ResourceList) ([]Resource, error) //模糊分页查询

	Find func() ([]ResourceCategory, error)
}

// 这是 resource 表的批量请求参数
type ResourceReq struct {
	List []Resource `json:"list" form:"list"`
}

// 这是 resourceDao.List()方法的请求参数
type ResourceList struct {
	Page
}

// 资源分类表
type ResourceCategory struct {
	CatId int `json:"cat_id"`
	Name string `json:"name"` //分类名
	Intro string `json:"intro"` //分类简介
	Ctime time.Time `json:"ctime"` //创建时间
}

// 资源扩展表
type ResourceEx struct {
	Id int `json:"id"`
	ViewNum int `json:"view_num"` //浏览数
	CmtNum int `json:"cmt_num"` //回复数
	LikeNum int `json:"like_num"`//喜欢数
	Mtime time.Time `json:"mtime"` //创建时间
}

